package com.lw.testvolatile;

import java.util.concurrent.TimeUnit;

/**
 * @author LW
 * @2020/8/21 15:21
 */

/**
 * Volatile：（标注共享变量）
 * java虚拟机提供轻量级的同步机制
 * 1.保证可见性
 * 2.***不保证原子性***（不可分割就叫“原子性”）
 * 原子性：线程在执行任务的时候，不能被打扰，也不能被分割。要么同时成功，要么同时失败
 * 3.禁止指令重排
 */
public class JMMDemo {
    //保证可见性
    //不加volatile   其他内存中的变量改变了，都不知道，没同步
    private volatile static int num = 0;

    public static void main(String[] args) {
        new Thread(()->{//对 主线程的变化不知道
           while (num==0){//加了volatile后  主线程的num值改变，就----可见

           }
        }).start();
        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
//        num=1;
        //System.out.println()中有同步块  synchronized
        System.out.println(Thread.currentThread().getName()+num+1);
    }
}
